Most complex computer programs contain instructions whose results are never used. These useless instructions may occur in any program regardless of size or complexity. An example of useless instructions occurs upon exiting a procedure. Generally, when the processor calls a procedure, the processor saves the registers on the stack to preserve the data in the registers for use after exiting the procedure. Upon exiting the procedure, the processor restores the data in the registers with the data previously stored on the stack. If the processor did not use the registers during the procedure, both storing the registers to the stack and restoring the registers from the stack were useless operations. Also, if the processor did not use the registers after the procedure has returned, restoring the registers from the stack was a useless operation. A similar case may also arise from other run time artifacts or poor programming techniques and modifications to the program. For instance, assume a program or instruction stream having three instructions. The first and third instructions write to a particular register. The second instruction reads that register. If the second instruction, due to (e.g.,) partial optimizations, is deleted or omitted, then the first instruction is useless because the third instruction overwrites the register before the value written by the first instruction is ever used.
Ideally, the compiler should have eliminated those useless instructions. However, attempts during compilation to eliminate these useless instructions fail because the conditions determining the actual program flow are usually set during run time.
Note also that a seemingly useless instruction may become so if an exception occurs after the processor executes a useless operation, but before the execution of the instruction that rendered the useless operation useless. In that case, the exception handler may want to access the data that would have been written during the useless instruction. Hence, the loss of that data greatly complicates troubleshooting and exception handling.